CREATE PROC [dbo].[EPOUpdateOrderStatus]
    @NewStatus TINYINT,
    @OrderId BIGINT,
    @CreatedBy SMALLINT,
    @PrescriptionTmpId DEC(18, 0) = 0,
    @ShouldSync BIT = 0
AS
BEGIN
    DECLARE @Id UNIQUEIDENTIFIER;
    DECLARE @InvoiceJson NVARCHAR(MAX);

    SELECT @Id = Id
    FROM dbo.EPOTracking
    WHERE OrderId = @OrderId;

    IF @Id IS NULL
        RETURN -1;

    IF @PrescriptionTmpId > 0
       AND @NewStatus = 9
        EXEC dbo.EPOMakeOrderJson @PrecriptionId = @PrescriptionTmpId,
                                  @JsonResult = @InvoiceJson OUTPUT;

    UPDATE dbo.EPOTracking
    SET UpdatedOn = GETDATE(),
        [Status] = @NewStatus,
        OrderJson = @InvoiceJson,
        PrescriptionId = CASE
                             WHEN @PrescriptionTmpId > 0 THEN
                                 @PrescriptionTmpId
                             ELSE
                                 PrescriptionId
                         END,
        IsPaid = CASE
                     WHEN @NewStatus = 22 THEN
                         1
                     ELSE
                         IsPaid
                 END
    WHERE OrderId = @OrderId;

    INSERT INTO dbo.EPOTrackingDetail
    (
        TrackingId,
        CreatedOn,
        [Status],
        CreatedBy
    )
    VALUES
    (@Id, GETDATE(), @NewStatus, @CreatedBy);

    IF @ShouldSync = 1
        INSERT INTO dbo.EShopTablesChanges
        (
            Id,
            [Name],
            EntityRowId,
            ModifiedOn,
            [Action]
        )
        VALUES
        (NEWID(), 'EPOTracking', @Id, GETDATE(), 0);
END;